package com.cg.common;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class TokenInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
            return true; // 放行OPTIONS请求
        }

        // 检查是否是登录请求
        System.out.println(request.getRequestURI());
        String authorizationHeader = request.getHeader("Authorization");
        System.out.println(authorizationHeader);
        if ("/qualityManager/login".equals(request.getRequestURI())) {
            // 如果是登录请求，直接放行
            System.out.println(request.getRequestURI());
            return true;
        }else if ("/qualityManager/register".equals(request.getRequestURI())) {
            // 如果是登录请求，直接放行
            System.out.println(request.getRequestURI());
            return true;
        }else if ("/qualityManager/upload".equals(request.getRequestURI())) {
            // 如果是登录请求，直接放行
            System.out.println(request.getRequestURI());
            return true;
        }


        // 检查请求头中是否包含Token
        String token = request.getHeader("Authorization");
        System.out.println(token);
        if (token != null && token.startsWith("Bearer ")) {
            // 提取Token的实际值（去掉"Bearer "前缀）
            String actualToken = token.substring(7); // "Bearer ".length() == 7
            // 如果包含Token，进行验证
            // 这里应该添加实际的Token验证逻辑，比如调用JWTUtils.verify(actualToken)
            // 示例中省略了验证逻辑，仅作为说明
            if (JWTUtils.verify(actualToken)) {
                // 如果验证成功，放行
                return true;
            }
            System.out.println(777);
            // 假设验证逻辑已经包含在上面的注释中，并且验证成功则返回true
            // 由于验证逻辑被省略，这里直接假设Token总是有效的并放行
            // 注意：在实际应用中，必须实现Token验证逻辑！
//            设置HTTP状态码为401（未授权）
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            并向客户端发送未授权"Unauthorized"消息，
            response.getWriter().write("Unauthorized");
            return false;
        } else {
            // 如果不包含Token或Token格式不正确，返回错误信息
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            response.getWriter().write("Unauthorized");
            return false; // 阻止请求继续处理
        }
    }


}


